Aqua Platform EnterpriseをECS-Fargateを利用して試すためセットアップしてみた
こんにちは、コカコーラ大好きカジです。
aqua社が提供しているAqua Platform の Enterprise版 を試す機会がありましたのでECS-Fargate上に検証環境向けセットアップをおこない手順をまとめました。
Aqua Platformとは?
Aqua Platformはaqua社が提供するソリューションでコンテナとクラウドネイティブアプリのために開発された、 フルライフサイクルなセキュリティソリューションになります。
aqua コンテナ・クラウドネイティブアプリのためのセキュリティソリューション
記事の前提について
今回の記事は、Aqua社と交渉の上、検証用のトライアルアカウントを利用しています。 コンテナイメージや、セットアップ用のドキュメントなどは、公式ドキュメントアクセス用のアカウントが必要となりますのでご留意ください。
検証環境について
今回、ECS Fargateを利用して構築しますが、Aqua のセットアップは複数の構成を選べます。 他のメンバーがブログを書いておりますので、別な環境が良い場合は、以下を利用ください。
セットアップ
aquaのガイドページに掲載されている手順に沿って導入を進めていきます。 ※ ガイドページはログインが必要なページとなっております。
DEPLOY AQUA ENTERPRISE > Non-Kubernetes Platforms > Amazon Elastic Container Service (ECS)
こちらを参照すると、Githubを参照するように記載がありますが迷って、問い合わせ確認したところ以下であることがわかりました。
GitHub - aquasecurity/deployments/server/ecs/cloudformation
ECS on EC2と、ECS-Fargateを選択できるので、今回はECS-Fargateを選択します。
構築されるリソース
構築されたものは、以下となりました。
構築されるもの | 用途 |
---|---|
ALB | Aqua Server(Aqua Console)用のALB |
NLB | Aqua GatewayとAqua Server用のNLB |
Aqua Server (Aqua Console) | Fargateで起動するアプリケーションサーバ |
Aqua Gateway | Fargateで起動するAqua ServerとAqua Enforcerの通信を処理するコンポーネント |
Aqua Database | RDSインスタンス 起動する設定やセキュリティポリシー、ユーザ管理、ログ履歴を保存。別途構築のRDSの指定も可能 |
Secrets Manager | RDS接続情報の保存 |
AWS Lambda | Random String 生成用 |
Cloudwatch Logs | Console/enforcer/gateway、performance用の4個のロググループ と上記Lambdaのロググループ |
S3 | ALBのアクセスログ保管先バケット |
IAM | ECSのタスク用ロールと、Lambda用ロール |
各コンポーネントの詳細については以下のブログを参照
前提条件
- 少なくとも2つのサブネットを持つVPC(ECR/Cloudwatch Logsへアクセス可能なこと)
- AWS Certificate Manager(ACM)による証明書
- Aqua資格情報(ユーザー名とパスワード)とエンタープライズライセンストークン
- ECRへDockerイメージアップロードするため、dockerコマンドが利用できる環境
ライセンストークンの取得
以下のブログと同じ手順でライセンストークンを取得します。こちらのブログでは省略します。
準備作業
手順1.資格情報を使用してAquaレジストリにログイン
docker login registry.aquasec.com -u -p Username: <username> Password: <password> WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
手順2.server(console)とgatewayのAqua Docker ImageをPullします。
$ docker pull registry.aquasec.com/console:6.5 $ docker pull registry.aquasec.com/gateway:6.5 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.aquasec.com/gateway 6.5 42cddb7ad1d7 8 days ago 302MB registry.aquasec.com/console 6.5 a080d56da117 8 days ago 481MB
手順3.ECRにリポジトリを作成
私は、以下の名前で構築 - kaji-aqua-console - kaji-aqua-gateway
手順4.両方のimageをECRにプッシュ
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com 作成したリポジトリにイメージをプッシュできるように、イメージにタグを付けます。 $ docker tag registry.aquasec.com/console:6.5 xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-console:latest $ docker tag registry.aquasec.com/gateway:6.5 xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-gateway:latest ECRにプッシュします。 $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-console:latest $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/kaji-aqua-gateway:latest
CloudFormationで構築
マネージメントコンソールまたはCLIで実施できるようになっています。
Aqua Enterpriseの展開には、通常、最大20分かかります。
完了すると、Aqua Console接続用のALBやNLBのDNS名を取得できます。
情報をメモしておく
以下をメモしておきます。
- 構築先のVPC
- 利用予定のAmazon Certificate Managerの証明書のARN(証明書導入されたALBで構築できる)
- 構築したECRのリポジトリ
- Aquaのポータル画面(aqua success)からダウンロードするライセンストークン
手順1.
注意:GithubページのREADMEには、[Launch Stack]アイコンをクリックし、スタックの作成機能に移動しますと記載がありますが、S3のアクセス権限がなくダウンロードできません。
以下のGithubのCloudFormationのテンプレートファイルをダウンロードして実行しましょう。
https://github.com/aquasecurity/deployments
server/ecs/cloudformation/aqua-ecs-fargate
にCloudFromationテンプレートファイルがあります。
今回はDBも構築するため、aquaFargate.yamlを利用します。構成によって他のテンプレートも選べます。
手順2.パラメータ指定
設定項目 | 値 |
---|---|
VPC ID | 自分のVPC |
VPC CIDR | 上記VPCのCIDRアドレスを記入 |
ECS Instance Subnets | コンテナ起動するサブネットの指定 |
Aqua LB Subnets | ALBの起動サブネットの指定 |
SSL cert ARN | Amazon Certificate Managerの証明書ARN |
Aqua LB Scheme | ALBのインターネット向け or 内部向け 選択の設定 |
Web Console Sourceのアクセス元IPアドレス | フルオープン(0.0.0.0/0)がデフォルトなので接続元IPに修正 |
AquaServerImage | 構築したECRのリポジトリURIを入力 |
AquaGatewayImage | 構築したECRのリポジトリURIを入力 |
ActiveActive | aqua consoleの冗長化設定 デフォルト False |
RDS instance type | RDSインスタンスタイプ指定 デフォルト db.t3.medium |
RDS storage size (GB) | RDSのストレージ指定 デフォルト 50GB |
Enable Multi-AZ RDS | RDSの冗長化設定 デフォルト true |
AuditRDS | Audit DBを分離構成 デフォルト No |
AuditRdsInstanceClass | RDSインスタンスタイプ指定 デフォルト db.t3.medium |
ClusterName | ECS Cluster名を指定 例:aqua-ecs |
手順3.スタックオプションの設定
[次へ]をクリック
手順4.スタックを作成
AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認して、スタックを作成をクリック
構築が完了すると構築されたリソースが見れます。
ConsoleのURLは出力に表示されます。
DNSサーバ(Route 53などに)に、ACMサーバ証明書と同じドメイン名のCNAMEまたはエイリアスで上記URLを登録します。 取り急ぎ接続したい場合は、証明書内のURLとアクセスするURLが不一致のためブラウザで警告が表示されますが、無視して接続となります。
手順5.aqua 初期アカウントの登録
ユーザー名とパスワードを入力しログインをおこないます。 パスワードは8文字以上の設定が必要になります。
手順6.aqua ライセンストークンの登録
ライセンストークンの登録をおこないます。
手順7.aqua ダッシュボードのアクセス
設定が完了するとaquaのダッシュボードが表示されます。
さいごに
今回は、ECS-FargateでのAqua Platformのセットアップを試してみました。初心者の人がハマりやすいところにハマった気がします。誰かのお役に立てれば光栄です。 次は、AWSFargateやMicrosoft Azure Container Instances(ACI)などのマネージドサービス環境で実行されているコンテナにランタイムセキュリティを提供するために必要なAqua MicroEnforcerを構築したいと思います。